package leetcode.array;

public class _904 {

    /**
     * 904. 水果成篮
     * <p>
     * 示例 1：
     * <p>
     * 输入：fruits = [1,2,1]
     * 输出：3
     * 解释：可以采摘全部 3 棵树。
     * 示例 2：
     * <p>
     * 输入：fruits = [0,1,2,2]
     * 输出：3
     * 解释：可以采摘 [1,2,2] 这三棵树。
     * 如果从第一棵树开始采摘，则只能采摘 [0,1] 这两棵树。
     * 示例 3：
     * <p>
     * 输入：fruits = [1,2,3,2,2]
     * 输出：4
     * 解释：可以采摘 [2,3,2,2] 这四棵树。
     * 如果从第一棵树开始采摘，则只能采摘 [1,2] 这两棵树。
     * 示例 4：
     * <p>
     * 输入：fruits = [3,3,3,1,2,1,1,2,3,3,4]
     * 输出：5
     * 解释：可以采摘 [1,2,1,1,2] 这五棵树。
     */
    public static void main(String[] args) {
        int[] arr = new int[]{3, 3, 3, 1, 2, 1, 1, 2, 3, 3, 4};
        int i = totalFruit(arr);
        System.out.println("i = " + i);
    }


    public static int totalFruit(int[] fruits) {
        int left = 0;
        int middle = 0;
        int right = 0;
        int result = 0;
        boolean has = true; // 是否还有篮子
        int lastFruitType = fruits[0]; // 上一个试过种类
        while (right < fruits.length) {
            if (fruits[right] == lastFruitType || fruits[right] == fruits[left]) {
                right++;
            } else if (fruits[right] != lastFruitType && has) {
                has = false;
                lastFruitType = fruits[right];
                middle = right;
            } else {
                has = true;
                result = result > right - left ? result : right - left;
                left = middle;

            }
        }
        return result;

    }
}
